<html>
 <head>
  <meta charset="utf-8"/>
  <meta content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no" name="viewport"/>
  <title>
   【干货】如何玩转Zeus，一个攻城狮的技术笔记  | 数螺 | NAUT IDEA
  </title>
  <link href="http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap-theme.min.css" rel="stylesheet"/>
  <link href="http://cdn.bootcss.com/bootstrap/3.3.6/css/bootstrap.min.css" rel="stylesheet"/>
  <style type="text/css">
   #xmain img {
                  max-width: 100%;
                  display: block;
                  margin-top: 10px;
                  margin-bottom: 10px;
                }

                #xmain p {
                    line-height:150%;
                    font-size: 16px;
                    margin-top: 20px;
                }

                #xmain h2 {
                    font-size: 24px;
                }

                #xmain h3 {
                    font-size: 20px;
                }

                #xmain h4 {
                    font-size: 18px;
                }


                .header {
	           background-color: #0099ff;
	           color: #ffffff;
	           margin-bottom: 20px;
	        }

	        .header p {
                  margin: 0px;
                  padding: 10px 0;
                  display: inline-block;  
                  vertical-align: middle;
                  font-size: 16px;
               }

               .header a {
                 color: white;
               }

              .header img {
                 height: 25px;
              }
  </style>
  <script src="http://cdn.bootcss.com/jquery/3.0.0/jquery.min.js">
  </script>
  <script src="http://nautstatic-10007657.file.myqcloud.com/static/css/readability.min.js" type="text/javascript">
  </script>
  <script type="text/javascript">
   $(document).ready(function() {
                 var loc = document.location;
                 var uri = {
                  spec: "http://dataunion.org/3194.html",
                  host: "http://dataunion.org",
                  prePath: "http://dataunion.org",
                  scheme: "http",
                  pathBase: "http://dataunion.org/"
                 };
    
                 var documentClone = document.cloneNode(true);
                 var article = new Readability(uri, documentClone).parse();
     
                 document.getElementById("xmain").innerHTML = article.content;
                });
  </script>
  <!-- 1466455208: Accept with keywords: (title(0.0):社区,数盟,笔记,技术,干货,狮, topn(0.2):社区,界面,Hadoop,行业资讯,任务,数据挖掘,文件,配置文件,hadoop,阿里,可视化,文章,类型,基础架构,数据,场景,部署,数盟,脚本,错误,编程语言,系统,调度,内容,无法,二次开发,时候,任务调度,邮件,页面).-->
 </head>
 <body onload="">
  <div class="header">
   <div class="container">
    <div class="row">
     <div class="col-xs-6 col-sm-6 text-left">
      <a href="/databee">
       <img src="http://nautidea-10007657.cos.myqcloud.com/logo_white.png"/>
      </a>
      <a href="/databee">
       <p>
        数螺
       </p>
      </a>
     </div>
     <div class="hidden-xs col-sm-6 text-right">
      <p>
       致力于数据科学的推广和知识传播
      </p>
     </div>
    </div>
   </div>
  </div>
  <div class="container text-center">
   <h1>
    【干货】如何玩转Zeus，一个攻城狮的技术笔记
   </h1>
  </div>
  <div class="container" id="xmain">
   ﻿﻿
   <title>
    【干货】如何玩转Zeus，一个攻城狮的技术笔记 | 数盟社区
   </title>
   <!-- All in One SEO Pack 2.2.7.6.2 by Michael Torbert of Semper Fi Web Design[32,70] -->
   <!-- /all in one seo pack -->
   <!--
<div align="center">
<a href="http://strata.oreilly.com.cn/hadoop-big-data-cn?cmp=mp-data-confreg-home-stcn16_dataunion_pc" target="_blank"><img src="http://dataunion.org/wp-content/uploads/2016/05/stratabj.jpg"/ ></a>
</div>
-->
   <header id="header-web">
    <div class="header-main">
     <hgroup class="logo">
      <h1>
       <a href="http://dataunion.org/" rel="home" title="数盟社区">
        <img src="http://dataunion.org/wp-content/themes/yzipi/images/logo.png"/>
       </a>
      </h1>
     </hgroup>
     <!--logo-->
     <nav class="header-nav">
      <ul class="menu" id="menu-%e4%b8%bb%e8%8f%9c%e5%8d%95">
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-71" id="menu-item-71">
        <a href="http://dataunion.org/category/events" title="events">
         活动
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-22457" id="menu-item-22457">
          <a href="http://dataunion.org/2016timeline">
           2016档期
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-22459" id="menu-item-22459">
          <a href="http://dataunion.org/category/parterc">
           合作会议
          </a>
         </li>
        </ul>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor menu-item-has-children menu-item-20869" id="menu-item-20869">
        <a href="http://dataunion.org/category/tech" title="articles">
         文章
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category current-post-ancestor current-menu-parent current-post-parent menu-item-20867" id="menu-item-20867">
          <a href="http://dataunion.org/category/tech/base" title="base">
           基础架构
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3302" id="menu-item-3302">
          <a href="http://dataunion.org/category/tech/ai" title="ai">
           人工智能
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3303" id="menu-item-3303">
          <a href="http://dataunion.org/category/tech/analysis" title="analysis">
           数据分析
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-21920" id="menu-item-21920">
          <a href="http://dataunion.org/category/tech/dm">
           数据挖掘
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3314" id="menu-item-3314">
          <a href="http://dataunion.org/category/tech/viz" title="viz">
           可视化
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-3305" id="menu-item-3305">
          <a href="http://dataunion.org/category/tech/devl" title="devl">
           编程语言
          </a>
         </li>
        </ul>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-20876" id="menu-item-20876">
        <a href="http://dataunion.org/category/industry">
         行业
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-16328" id="menu-item-16328">
          <a href="http://dataunion.org/category/industry/case" title="case">
           行业应用
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-2112" id="menu-item-2112">
          <a href="http://dataunion.org/category/industry/demo" title="demo">
           Demo展示
          </a>
         </li>
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-21562" id="menu-item-21562">
          <a href="http://dataunion.org/category/industry/news">
           行业资讯
          </a>
         </li>
        </ul>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-311" id="menu-item-311">
        <a href="http://dataunion.org/category/sources" title="sources">
         资源
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-20870" id="menu-item-20870">
        <a href="http://dataunion.org/category/books" title="book">
         图书
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-21363" id="menu-item-21363">
        <a href="http://dataunion.org/category/training">
         课程
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-has-children menu-item-21853" id="menu-item-21853">
        <a href="http://dataunion.org/category/jobs">
         职位
        </a>
        <ul class="sub-menu">
         <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-22050" id="menu-item-22050">
          <a href="http://dataunion.org/category/career">
           职业规划
          </a>
         </li>
        </ul>
       </li>
      </ul>
     </nav>
     <!--header-nav-->
    </div>
   </header>
   <!--header-web-->
   <div id="main">
    <div id="soutab">
     <form action="http://dataunion.org/" class="search" method="get">
     </form>
    </div>
    <div id="container">
     <nav id="mbx">
      当前位置：
      <a href="http://dataunion.org">
       首页
      </a>
      &gt;
      <a href="http://dataunion.org/category/tech">
       文章
      </a>
      &gt;
      <a href="http://dataunion.org/category/tech/base">
       基础架构
      </a>
      &gt;  正文
     </nav>
     <!--mbx-->
     <article class="content">
      <header align="centre" class="contenttitle">
       <div class="mscc">
        <h1 class="mscctitle">
         <a href="http://dataunion.org/3194.html">
          【干货】如何玩转Zeus，一个攻城狮的技术笔记
         </a>
        </h1>
        <address class="msccaddress ">
         <em>
          5,457 次阅读 -
         </em>
         <a href="http://dataunion.org/category/tech/base" rel="category tag">
          基础架构
         </a>
        </address>
       </div>
      </header>
      <div class="content-text">
       <p>
        <b>
         【Zeus3简介】
        </b>
       </p>
       <p>
        Zeus3是一个完整的Hadoop的作业平台，是基于Zeus的一个二次开发项目，从Hadoop任务的调试运行到生产任务的周期调度，宙斯支持任务的整个生命周期从功能上来说，支持：
        <br/>
        HadoopMapReduce任务的调试运行
        <br/>
        Hive任务的调试运行
        <br/>
        Shell任务的运行
        <br/>
        Hive元数据的可视化查询与数据预览
        <br/>
        Hadoop任务的自动调度
        <br/>
        完整的文档管理
       </p>
       <p>
        <b>
         【作者简介】
        </b>
       </p>
       <p>
        蔡畅奇（Andy.cai），Java工程师 一直从事软件研发工作, 从2010年开始从事大数据的工作,做过ERP, 车联网, 爬虫, 电商系统的大数据体系架构. 专研过Java分布式编程以及传统、机器学习算法。287888203@qq.com，
        <a href="http://www.quora.com/Changqi-Cai" target="_blank">
         http://www.quora.com/Changqi-Cai
        </a>
       </p>
       <p>
        Andy.cai利用业余时间在阿里Zeus/Zeus2的基础上做二次开发，历时2周，并完善使用文档贡献给大家。
       </p>
       <p>
        <b>
         【文章正文】
        </b>
       </p>
       <p>
        改造Zeus的由来还要从项目组上Hive离线挖掘说起。当初项目组上Hive数据仓库需要调度各种Hive-SQL与Linux-Shell脚本，最开始的时候是通过Linux终端直接在生产环境上部署，并通过Linux的crontab调度。
       </p>
       <p>
        生产环境上第一个脚本调度程序没有感觉，上多个后发现问题太多了：
       </p>
       <p>
        [a]每个脚本程序运行情况不好监控，程序运行情况无法可视化查看
       </p>
       <p>
        [b]每个服务器上跑了多少调度脚本不清楚
       </p>
       <p>
        [c]运维同事生产发版更乱，无法简单地掌握全部调度情况
       </p>
       <p>
        [d]复杂的workflow调度只能通过shell里面调用子shell的方式，耦合太深，不利于模块化。
       </p>
       <p>
        [e]缺乏脚本调度的统计，多少成功，多少失败，多少延迟等
       </p>
       <p>
        为了解决这个问题，需要采用一套调度系统，由于生产集群有安全控制需要，所以最好能是可以Web显示的系统。
       </p>
       <p>
        我之前调研过Oozie调度系统，Oozie使用的时候有以下不便：
       </p>
       <p>
        [a]Oozie调度的Workflow只能使用XML文件配置
       </p>
       <p>
        [b]启动调度只能通过命令行
       </p>
       <p>
        [c]无法通过Oozie界面调试调度脚本
       </p>
       <p>
        [d]Oozie无法可视化调试脚本时候
       </p>
       <p>
        [e]无法分组，权限管理等
       </p>
       <p>
        同时调研过Kettle系统，Kettle更多关注在关系型DB之间的调度。由于Kettle不支持web页面，并且通过Hive Server调度Hive做Hive计算不太灵活。
       </p>
       <p>
        因此视线转移到了阿里的Zeus大数据调度系统[1]，但是阿里的Zeus调度系统距离现在已经2年没有维护。说到Zeus调度系统，我本人一年多前面试杭州阿里的推荐引擎大部门算法专家职位的时候，面试我的主管还特地问过我例如：Zeus是干啥的之类的问题，并给我介绍Zeus是他们团队的作品。加上Zeus是用java开发，我这几年一直研究阿里的java开源系统与java中间件开发，这样更加增加了我对Zeus调度系统改造的兴趣。
       </p>
       <p>
        首先介绍下Github上的Zeus调度系统[1]，Github上的Zeus系统刚刚上线时候很多人关注但是由于长期缺少人维护。由于时隔2年，支持的还是Hadoop1.X，我通读了里面的代码，
       </p>
       <p>
        Zeus基于GWT开发。Google Web Toolkit的缩写，有了 GWT可以使用 Java 编程语言编写 AJAX 前端，然后 GWT 会交叉编译到优化的JavaScript 中，而 JavaScript 可以自动在所有主要浏览器上运行。GWT允许开发人员使用 Java 编程语言快速构建和维护复杂但性能高的 JavaScript 前端应用程序，从而降低了开发难度，尤其是与 Eclipse Google 插件结合使用时，优势更明显。Zeus通过MySQL存储各项调度任务，使用Dos2Unix转换脚本格式，通过读取(hive,shell以及自定义的变量)环境变量，使用Processbuilder调度。另外，使用CronTrigger定义定时调度。
       </p>
       <p>
        Zeus能支持主要4种调度：
       </p>
       <p>
        (1) Hive调度，将页面上的hive脚本转换为sql，然后通过hive -f x.sql执行调度。
       </p>
       <p>
        (2)Shell调度，将页面上的shell脚本转为x.sh 通过sh x.sh调度。
       </p>
       <p>
        (3)mapreduce调度，将页面上的jar文件通过hadoop 执行调度。
       </p>
       <p>
        (4)调度java-jar包
       </p>
       <p>
        Zeus的工程由以下几部分组成:
       </p>
       <p>
        <a href="http://dataunion.org/wp-content/uploads/2014/12/354.png">
         <img src="http://dataunion.org/wp-content/uploads/2014/12/354-300x258.png"/>
        </a>
       </p>
       <p>
        Zeus3的使用：
       </p>
       <p>
        对一个软件系统的了解，先是了解如何使用这个系统,有哪些功能，开发的技术是啥，用了哪些套路，就像学骑车一样，先学会骑，然后再考虑如何改进与二次开发。下面再介绍Zeus3的使用场景：
       </p>
       <p>
       </p>
       <p>
        Zeus3的安装与部署
       </p>
       <p>
        <b>
         [1]配置目录权限
        </b>
       </p>
       <p>
        mkdir -p /data/zeus/log
       </p>
       <p>
        sudo -u hdfs hadoop fs -mkdir /zeus
       </p>
       <p>
        sudo -u hdfs hadoop fs -mkdir /zeus/hdfs-upload-dir
       </p>
       <p>
        mkdir -p /data/zeus/users/zhoufang/zeus/run_job_dir
       </p>
       <p>
        mkdir -p /data/zeus/group/tbdataapplication/zhoufang
       </p>
       <p>
        mkdir -p /data/zeus/users/zhoufang/zeus/logs/
       </p>
       <p>
        <b>
         [2]配置文件修改
        </b>
       </p>
       <p>
        2.1 zeus-web.properties //新增加的配置文件
       </p>
       <p>
        2.2 persistence.xml
       </p>
       <p>
        2.3 log4j.xml
       </p>
       <p>
        2.4 broadcast-applicationContext.xml
       </p>
       <p>
        <b>
         [3]zeus的table创建文件
        </b>
       </p>
       <p>
        zeus3.sql
       </p>
       <p>
        先创建zeus3数据库
       </p>
       <p>
        <b>
         [4]启动
        </b>
       </p>
       <p>
        通过tomcat起来，tomcat的内存请开大，如：12G。
       </p>
       <p>
        另外，多次启动的时候，有可能需要kill掉之前的tomcat进程。
       </p>
       <p>
        <b>
         [5]浏览器
        </b>
       </p>
       <p>
        Zeus只支持firefox,chrome不支持IE
       </p>
       <p>
        <b>
         [6]自动发邮件设置
        </b>
       </p>
       <p>
        zeus-web.properties
        <b>
        </b>
       </p>
       <p>
        #mail
       </p>
       <p>
        mail.host=smtp.163.com
       </p>
       <p>
        mail.smtp.auth=false
       </p>
       <p>
        mail.smtp.timeout=25000
       </p>
       <p>
        mail.username=xxx@163.com
       </p>
       <p>
        mail.password=xxx
       </p>
       <p>
        Zeus3的使用：
       </p>
       <p>
        通过界面调试Hive脚本：
       </p>
       <p>
        <a href="http://dataunion.org/wp-content/uploads/2014/12/1.png">
         <img src="http://dataunion.org/wp-content/uploads/2014/12/1-300x174.png"/>
        </a>
       </p>
       <p>
        调试Hive的结果界面：
       </p>
       <p>
        <a href="http://dataunion.org/wp-content/uploads/2014/12/2.png">
         <img src="http://dataunion.org/wp-content/uploads/2014/12/2-300x162.png"/>
        </a>
       </p>
       <p>
        [2]调试Shell
       </p>
       <p>
        调试页面，大体同调试Hive的界面：
       </p>
       <p>
        <a href="http://dataunion.org/wp-content/uploads/2014/12/3.png">
         <img src="http://dataunion.org/wp-content/uploads/2014/12/3-300x173.png"/>
        </a>
        <a href="http://dataunion.org/wp-content/uploads/2014/12/4.png">
         <img src="http://dataunion.org/wp-content/uploads/2014/12/4-300x214.png"/>
        </a>
       </p>
       <p>
        [3]调度Shell
       </p>
       <p>
        场景1：shell_task_1.sh 内部调用shell_task_yy.sh
       </p>
       <p>
        Step1:上传shell_task_yy.sh作为资源
       </p>
       <p>
        <a href="http://dataunion.org/wp-content/uploads/2014/12/5.png">
         <img src="http://dataunion.org/wp-content/uploads/2014/12/5-300x130.png"/>
        </a>
       </p>
       <p>
        Step2:编辑调用
       </p>
       <p>
        #!/bin/bash
       </p>
       <p>
        sh ./shell_task_yy.sh
       </p>
       <p>
        echo ‘shell_task_1’
       </p>
       <p>
        Step3:执行
       </p>
       <p style="text-align: center;">
        <a href="http://dataunion.org/wp-content/uploads/2014/12/6.png">
         <img src="http://dataunion.org/wp-content/uploads/2014/12/6-300x131.png"/>
        </a>
       </p>
       <p>
        Step4:执行结果
       </p>
       <p>
        <a href="http://dataunion.org/wp-content/uploads/2014/12/7.png">
         <img src="http://dataunion.org/wp-content/uploads/2014/12/7-300x145.png"/>
        </a>
       </p>
       <p>
        场景2：定时调度任务，每隔1分钟调度一次，不断循环
       </p>
       <p>
        0 0/1 * * * ?
       </p>
       <p>
        <a href="http://dataunion.org/wp-content/uploads/2014/12/231.png">
         <img src="http://dataunion.org/wp-content/uploads/2014/12/231-300x290.png"/>
        </a>
       </p>
       <p>
        场景3：依赖调度，先调度A再调度B
       </p>
       <p>
        0 0/1 * * * ?
       </p>
       <p>
        <a href="http://dataunion.org/wp-content/uploads/2014/12/715.png">
         <img src="http://dataunion.org/wp-content/uploads/2014/12/715-300x287.png"/>
        </a>
       </p>
       <p>
       </p>
       <p>
        <a href="http://dataunion.org/wp-content/uploads/2014/12/16.png">
         <img src="http://dataunion.org/wp-content/uploads/2014/12/16-300x185.png"/>
        </a>
       </p>
       <p>
       </p>
       <p>
        <a href="http://dataunion.org/wp-content/uploads/2014/12/17.png">
         <img src="http://dataunion.org/wp-content/uploads/2014/12/17-300x177.png"/>
        </a>
       </p>
       <p>
        场景3：依赖调度，先调度A再调度B
       </p>
       <p>
        具体配置细节：
       </p>
       <p>
        (1)A任务调度配置自动一分钟一次：0 0/1 * * * ?
       </p>
       <p>
        (2)B任务调度要配置依赖A任务，然后选择启动
       </p>
       <p>
        (3)启动A任务
       </p>
       <p>
        (4)查看workflow的调度结果
       </p>
       <p>
        整个workflow由A触发
       </p>
       <p>
        <a href="http://dataunion.org/wp-content/uploads/2014/12/18.png">
         <img src="http://dataunion.org/wp-content/uploads/2014/12/18-300x191.png"/>
        </a>
       </p>
       <p>
        调度Hive
       </p>
       <p>
        场景1-3：直接调用Hive-SQL，与SHELL类似
       </p>
       <p>
        <a href="http://dataunion.org/wp-content/uploads/2014/12/19.png">
         <img src="http://dataunion.org/wp-content/uploads/2014/12/19-300x165.png"/>
        </a>
       </p>
       <p>
        Zeus3的二次开发与改进之处：
       </p>
       <p>
        [1] zeus-schedule工程中实现报警邮件发送，通过JavaMailSender实现
       </p>
       <p>
        Java代码：
       </p>
       <p>
        <b>
         public
        </b>
        <b>
         class
        </b>
        MailAlarm
        <b>
         extends
        </b>
        AbstractZeusAlarm{
       </p>
       <p>
       </p>
       <p>
        @Resource
       </p>
       <p>
        <b>
         private
        </b>
        JavaMailSender mailSender;
       </p>
       <p>
        @Override
       </p>
       <p>
        <b>
         public
        </b>
        <b>
         void
        </b>
        alarm(List&lt;String&gt; users, String title, String content)
        <b>
         throws
        </b>
        Exception {
       </p>
       <p>
       </p>
       <p>
        <b>
         try
        </b>
        {
       </p>
       <p>
        MimeMessage mailMessage = mailSender.createMimeMessage();
       </p>
       <p>
        // 设置utf-8或GBK编码，否则邮件会有乱码
       </p>
       <p>
        MimeMessageHelper messageHelper =
        <b>
         new
        </b>
        MimeMessageHelper(mailMessage,
        <b>
         true
        </b>
        , “utf-8”);
       </p>
       <p>
        messageHelper.setTo(Global.
        <i>
         getConfig
        </i>
        (“mail.sendtolist”));    // 邮件接受者
       </p>
       <p>
        messageHelper.setFrom(Global.
        <i>
         getConfig
        </i>
        (“mail.username”)); // 邮件发送者
       </p>
       <p>
        messageHelper.setSubject(title); // 主题
       </p>
       <p>
        // 邮件内容，注意加参数true，表示启用html格式
       </p>
       <p>
        String htmlString = content;
       </p>
       <p>
        messageHelper.setText(htmlString,
        <b>
         true
        </b>
        );
       </p>
       <p>
        mailSender.send(mailMessage);
       </p>
       <p>
        }
        <b>
         catch
        </b>
        (Exception e) {
       </p>
       <p>
        e.printStackTrace();
       </p>
       <p>
        }
       </p>
       <p>
        }
       </p>
       <p>
        }
       </p>
       <p>
        XML配置：applicationContext-mail.xml
       </p>
       <p>
        &lt;?xml version=
        <i>
         “1.0”
        </i>
        encoding=
        <i>
         “UTF-8”
        </i>
        ?&gt;
       </p>
       <p>
        &lt;beans xmlns=
        <i>
         “http://www.springframework.org/schema/beans”
        </i>
       </p>
       <p>
        xmlns:xsi=
        <i>
         “http://www.w3.org/2001/XMLSchema-instance”
        </i>
        xmlns:aop=
        <i>
         “http://www.springframework.org/schema/aop”
        </i>
       </p>
       <p>
        xsi:schemaLocation=
        <i>
         “http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
        </i>
       </p>
       <p>
        <i>
         http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd”
        </i>
        &gt;
       </p>
       <p>
       </p>
       <p>
        &lt;bean id=
        <i>
         “mailSender”
        </i>
        class=
        <i>
         “org.springframework.mail.javamail.JavaMailSenderImpl”
        </i>
        &gt;
       </p>
       <p>
        &lt;property name=
        <i>
         “host”
        </i>
        &gt;
       </p>
       <p>
        &lt;value&gt;smtp.163.com&lt;/value&gt;
       </p>
       <p>
        &lt;/property&gt;
       </p>
       <p>
        &lt;property name=
        <i>
         “javaMailProperties”
        </i>
        &gt;
       </p>
       <p>
        &lt;props&gt;
       </p>
       <p>
        &lt;prop key=
        <i>
         “mail.smtp.auth”
        </i>
        &gt;false&lt;/prop&gt;
       </p>
       <p>
        &lt;prop key=
        <i>
         “mail.smtp.timeout”
        </i>
        &gt;25000&lt;/prop&gt;
       </p>
       <p>
        &lt;/props&gt;
       </p>
       <p>
        &lt;/property&gt;
       </p>
       <p>
        &lt;property name=
        <i>
         “username”
        </i>
        &gt;
       </p>
       <p>
        &lt;value&gt;xxx@163.com&lt;/value&gt;
       </p>
       <p>
        &lt;/property&gt;
       </p>
       <p>
        &lt;property name=
        <i>
         “password”
        </i>
        &gt;
       </p>
       <p>
        &lt;value&gt;xxx#&lt;/value&gt;
       </p>
       <p>
        &lt;/property&gt;
       </p>
       <p>
        &lt;/bean&gt;
       </p>
       <p>
        &lt;/beans&gt;
       </p>
       <p>
       </p>
       <p>
        配置读取修改：DailyConf.java, OnlineConf.java
       </p>
       <p>
        set(“fs.default.name”,Global.
        <i>
         getConfig
        </i>
        (“fs.default.name”));
       </p>
       <p>
        set(“mapred.working.dir”,Global.
        <i>
         getConfig
        </i>
        (“mapred.working.dir”));
       </p>
       <p>
       </p>
       <p>
        通过：Global读取配置参数
       </p>
       <p>
        Global的读取配置实现：
       </p>
       <p>
        Global.java
       </p>
       <p>
        <b>
         public
        </b>
        <b>
         class
        </b>
        Global {
       </p>
       <p>
        /**
       </p>
       <p>
        * 保存全局属性值
       </p>
       <p>
        */
       </p>
       <p>
        <b>
         private
        </b>
        <b>
         static
        </b>
        Map&lt;String, String&gt;
        <i>
         map
        </i>
        = Maps.
        <i>
         newHashMap
        </i>
        ();
       </p>
       <p>
        /**
       </p>
       <p>
        * 属性文件加载对象
       </p>
       <p>
        */
       </p>
       <p>
        <b>
         private
        </b>
        <b>
         static
        </b>
        PropertiesLoader
        <i>
         propertiesLoader
        </i>
        =
        <b>
         new
        </b>
        PropertiesLoader(“zeus-web.properties”);
       </p>
       <p>
        /**
       </p>
       <p>
        * 获取配置
       </p>
       <p>
        */
       </p>
       <p>
        <b>
         public
        </b>
        <b>
         static
        </b>
        String getConfig(String key) {
       </p>
       <p>
        String value =
        <i>
         map
        </i>
        .get(key);
       </p>
       <p>
        <b>
         if
        </b>
        (value ==
        <b>
         null
        </b>
        ){
       </p>
       <p>
        value =
        <i>
         propertiesLoader
        </i>
        .getProperty(key);
       </p>
       <p>
        <i>
         map
        </i>
        .put(key, value);
       </p>
       <p>
        }
       </p>
       <p>
        <b>
         return
        </b>
        value;
       </p>
       <p>
        }
       </p>
       <p>
        }
       </p>
       <p>
       </p>
       <p>
        PropertiesLoader.java,装载配置文件
       </p>
       <p>
        <b>
         public
        </b>
        <b>
         class
        </b>
        PropertiesLoader {
       </p>
       <p>
        <b>
         private
        </b>
        <b>
         static
        </b>
        Logger
        <i>
         logger
        </i>
        = LoggerFactory.
        <i>
         getLogger
        </i>
        (PropertiesLoader.
        <b>
         class
        </b>
        );
       </p>
       <p>
        <b>
         private
        </b>
        <b>
         static
        </b>
        ResourceLoader
        <i>
         resourceLoader
        </i>
        =
        <b>
         new
        </b>
        DefaultResourceLoader();
       </p>
       <p>
        <b>
         private
        </b>
        <b>
         final
        </b>
        Properties properties;
       </p>
       <p>
        <b>
         public
        </b>
        PropertiesLoader(String… resourcesPaths) {
       </p>
       <p>
        properties = loadProperties(resourcesPaths);
       </p>
       <p>
        }
       </p>
       <p>
       </p>
       <p>
        <b>
         public
        </b>
        Properties getProperties() {
       </p>
       <p>
        <b>
         return
        </b>
        properties;
       </p>
       <p>
        }
       </p>
       <p>
       </p>
       <p>
        /**
       </p>
       <p>
        * 取出Property，但以System的Property优先,取不到返回空字符串.
       </p>
       <p>
        */
       </p>
       <p>
        <b>
         private
        </b>
        String getValue(String key) {
       </p>
       <p>
        String systemProperty = System.
        <i>
         getProperty
        </i>
        (key);
       </p>
       <p>
        <b>
         if
        </b>
        (systemProperty !=
        <b>
         null
        </b>
        ) {
       </p>
       <p>
        <b>
         return
        </b>
        systemProperty;
       </p>
       <p>
        }
       </p>
       <p>
        <b>
         if
        </b>
        (properties.containsKey(key)) {
       </p>
       <p>
        <b>
         return
        </b>
        properties.getProperty(key);
       </p>
       <p>
        }
       </p>
       <p>
        <b>
         return
        </b>
        “”;
       </p>
       <p>
        }
       </p>
       <p>
       </p>
       <p>
        /**
       </p>
       <p>
        * 取出String类型的Property，但以System的Property优先,如果都为Null则抛出异常.
       </p>
       <p>
        */
       </p>
       <p>
        <b>
         public
        </b>
        String getProperty(String key) {
       </p>
       <p>
        String value = getValue(key);
       </p>
       <p>
        <b>
         if
        </b>
        (value ==
        <b>
         null
        </b>
        ) {
       </p>
       <p>
        <b>
         throw
        </b>
        <b>
         new
        </b>
        NoSuchElementException();
       </p>
       <p>
        }
       </p>
       <p>
        <b>
         return
        </b>
        value;
       </p>
       <p>
        }
       </p>
       <p>
       </p>
       <p>
        /**
       </p>
       <p>
        * 取出String类型的Property，但以System的Property优先.如果都为Null则返回Default值.
       </p>
       <p>
        */
       </p>
       <p>
        <b>
         public
        </b>
        String getProperty(String key, String defaultValue) {
       </p>
       <p>
        String value = getValue(key);
       </p>
       <p>
        <b>
         return
        </b>
        value !=
        <b>
         null
        </b>
        ? value : defaultValue;
       </p>
       <p>
        }
       </p>
       <p>
       </p>
       <p>
        /**
       </p>
       <p>
        * 取出Integer类型的Property，但以System的Property优先.如果都为Null或内容错误则抛出异常.
       </p>
       <p>
        */
       </p>
       <p>
        <b>
         public
        </b>
        Integer getInteger(String key) {
       </p>
       <p>
        String value = getValue(key);
       </p>
       <p>
        <b>
         if
        </b>
        (value ==
        <b>
         null
        </b>
        ) {
       </p>
       <p>
        <b>
         throw
        </b>
        <b>
         new
        </b>
        NoSuchElementException();
       </p>
       <p>
        }
       </p>
       <p>
        <b>
         return
        </b>
        Integer.
        <i>
         valueOf
        </i>
        (value);
       </p>
       <p>
        }
       </p>
       <p>
       </p>
       <p>
        /**
       </p>
       <p>
        * 取出Integer类型的Property，但以System的Property优先.如果都为Null则返回Default值，如果内容错误则抛出异常
       </p>
       <p>
        */
       </p>
       <p>
        <b>
         public
        </b>
        Integer getInteger(String key, Integer defaultValue) {
       </p>
       <p>
        String value = getValue(key);
       </p>
       <p>
        <b>
         return
        </b>
        value !=
        <b>
         null
        </b>
        ? Integer.
        <i>
         valueOf
        </i>
        (value) : defaultValue;
       </p>
       <p>
        }
       </p>
       <p>
       </p>
       <p>
        /**
       </p>
       <p>
        * 取出Double类型的Property，但以System的Property优先.如果都为Null或内容错误则抛出异常.
       </p>
       <p>
        */
       </p>
       <p>
        <b>
         public
        </b>
        Double getDouble(String key) {
       </p>
       <p>
        String value = getValue(key);
       </p>
       <p>
        <b>
         if
        </b>
        (value ==
        <b>
         null
        </b>
        ) {
       </p>
       <p>
        <b>
         throw
        </b>
        <b>
         new
        </b>
        NoSuchElementException();
       </p>
       <p>
        }
       </p>
       <p>
        <b>
         return
        </b>
        Double.
        <i>
         valueOf
        </i>
        (value);
       </p>
       <p>
        }
       </p>
       <p>
       </p>
       <p>
        /**
       </p>
       <p>
        * 取出Double类型的Property，但以System的Property优先.如果都为Null则返回Default值，如果内容错误则抛出异常
       </p>
       <p>
        */
       </p>
       <p>
        <b>
         public
        </b>
        Double getDouble(String key, Integer defaultValue) {
       </p>
       <p>
        String value = getValue(key);
       </p>
       <p>
        <b>
         return
        </b>
        value !=
        <b>
         null
        </b>
        ? Double.
        <i>
         valueOf
        </i>
        (value) : defaultValue;
       </p>
       <p>
        }
       </p>
       <p>
       </p>
       <p>
        /**
       </p>
       <p>
        * 取出Boolean类型的Property，但以System的Property优先.如果都为Null抛出异常,如果内容不是true/false则返回false.
       </p>
       <p>
        */
       </p>
       <p>
        <b>
         public
        </b>
        Boolean getBoolean(String key) {
       </p>
       <p>
        String value = getValue(key);
       </p>
       <p>
        <b>
         if
        </b>
        (value ==
        <b>
         null
        </b>
        ) {
       </p>
       <p>
        <b>
         throw
        </b>
        <b>
         new
        </b>
        NoSuchElementException();
       </p>
       <p>
        }
       </p>
       <p>
        <b>
         return
        </b>
        Boolean.
        <i>
         valueOf
        </i>
        (value);
       </p>
       <p>
        }
       </p>
       <p>
       </p>
       <p>
        /**
       </p>
       <p>
        * 取出Boolean类型的Property，但以System的Property优先.如果都为Null则返回Default值,如果内容不为true/false则返回false.
       </p>
       <p>
        */
       </p>
       <p>
        <b>
         public
        </b>
        Boolean getBoolean(String key,
        <b>
         boolean
        </b>
        defaultValue) {
       </p>
       <p>
        String value = getValue(key);
       </p>
       <p>
        <b>
         return
        </b>
        value !=
        <b>
         null
        </b>
        ? Boolean.
        <i>
         valueOf
        </i>
        (value) : defaultValue;
       </p>
       <p>
        }
       </p>
       <p>
       </p>
       <p>
        /**
       </p>
       <p>
        * 载入多个文件, 文件路径使用Spring Resource格式.
       </p>
       <p>
        */
       </p>
       <p>
        <b>
         private
        </b>
        Properties loadProperties(String… resourcesPaths) {
       </p>
       <p>
        Properties props =
        <b>
         new
        </b>
        Properties();
       </p>
       <p>
       </p>
       <p>
        <b>
         for
        </b>
        (String location : resourcesPaths) {
       </p>
       <p>
       </p>
       <p>
        InputStream is =
        <b>
         null
        </b>
        ;
       </p>
       <p>
        <b>
         try
        </b>
        {
       </p>
       <p>
        Resource resource =
        <i>
         resourceLoader
        </i>
        .getResource(location);
       </p>
       <p>
        is = resource.getInputStream();
       </p>
       <p>
        props.load(is);
       </p>
       <p>
        }
        <b>
         catch
        </b>
        (IOException ex) {
       </p>
       <p>
        <i>
         logger
        </i>
        .info(“Could not load properties from path:” + location + “, ” + ex.getMessage());
       </p>
       <p>
        }
        <b>
         finally
        </b>
        {
       </p>
       <p>
        IOUtils.
        <i>
         closeQuietly
        </i>
        (is);
       </p>
       <p>
        }
       </p>
       <p>
        }
       </p>
       <p>
        <b>
         return
        </b>
        props;
       </p>
       <p>
        }
       </p>
       <p>
        }
       </p>
       <p>
       </p>
       <p>
        这样，配置就能采用key-value的形式自由定义在:zeus-web.properties中:
       </p>
       <p>
        ————-zeus-web.properties文件内容—————–
       </p>
       <p>
        fs.default.name=hdfs://hmaster1:8020
       </p>
       <p>
        mapred.working.dir=/group/tbdataapplication/zhoufang
       </p>
       <p>
        mapred.job.tracker=hmaster1:8021
       </p>
       <p>
        supers=andy.cai
       </p>
       <p>
        email=xxx@qq.com
       </p>
       <p>
        name=\u8521\u7545\u5947
       </p>
       <p>
        phone=xxx
       </p>
       <p>
        uid=andy.cai
       </p>
       <p>
        mail.host=smtp.163.com
       </p>
       <p>
        mail.smtp.auth=false
       </p>
       <p>
        mail.smtp.timeout=25000
       </p>
       <p>
        mail.sendtolist=xxx@163.com
       </p>
       <p>
        mail.title=Zeus_Warning_Email
       </p>
       <p>
        mail.username=xxx@163.com
       </p>
       <p>
        mail.password=xxx#
       </p>
       <p>
       </p>
       <p>
        实际上这个项目可以配合Diamond[2],dubbo[3],flash-dog[3]来实现，由于考虑到部署的复杂度，所以还是精简下，配置文件这块采用Global读取配置参数的形式，日志管理暂时去掉，服务调用采用GWT-RPC调用。
       </p>
       <p>
       </p>
       <p>
        另外，ProcessJob.java, ConfUtil.java里面读取hive,hadoop等的配置文件，现在采用CDH版本的路径，后续可以改为通过配置文件读取，之前设计的是直接读取系统环境变量发现实际部署的时候有诸多不便。
       </p>
       <p>
       </p>
       <p>
        以上Zeus3的工程代码下载
       </p>
       <p>
        <a href="https://github.com/caichangqi/zeus3" target="_blank">
         https://github.com/caichangqi/zeus3
        </a>
       </p>
       <p>
       </p>
       <p>
        文中引用：
       </p>
       <p>
        [1]Zeus调度系统
       </p>
       <p>
        <a href="https://github.com/alibaba/zeus" target="_blank">
         https://github.com/alibaba/zeus
        </a>
       </p>
       <p>
        [2]diamond集中式配置管理系统
       </p>
       <p>
        <a href="http://code.taobao.org/p/diamond/src/" target="_blank">
         http://code.taobao.org/p/diamond/src/
        </a>
       </p>
       <p>
        [3]dubbo RPC-SOA框架
       </p>
       <p>
        <a href="http://alibaba.github.io/dubbo-doc-static/Home-zh.htm" target="_blank">
         http://alibaba.github.io/dubbo-doc-static/Home-zh.htm
        </a>
       </p>
       <p>
        [4]flash-dog 日志收集系统
       </p>
       <p>
        <a href="https://github.com/flash-dog/flash-dog" target="_blank">
         https://github.com/flash-dog/flash-dog
        </a>
       </p>
       <p>
       </p>
      </div>
      <div>
       <strong>
        注：转载文章均来自于公开网络，仅供学习使用，不会用于任何商业用途，如果侵犯到原作者的权益，请您与我们联系删除或者授权事宜，联系邮箱：contact@dataunion.org。转载数盟网站文章请注明原文章作者，否则产生的任何版权纠纷与数盟无关。
       </strong>
      </div>
      <!--content_text-->
      <div class="fenxian">
       <!-- JiaThis Button BEGIN -->
       <div class="jiathis_style_32x32">
        <p class="jiathis_button_weixin">
        </p>
        <p class="jiathis_button_tsina">
        </p>
        <p class="jiathis_button_qzone">
        </p>
        <p class="jiathis_button_cqq">
        </p>
        <p class="jiathis_button_tumblr">
        </p>
        <a class="jiathis jiathis_txt jtico jtico_jiathis" href="http://www.jiathis.com/share" target="_blank">
        </a>
        <p class="jiathis_counter_style">
        </p>
       </div>
       <!-- JiaThis Button END -->
      </div>
     </article>
     <!--content-->
     <!--相关文章-->
     <div class="xianguan">
      <div class="xianguantitle">
       相关文章！
      </div>
      <ul class="pic">
       <li>
        <a href="http://dataunion.org/24670.html">
         <img src="http://dataunion.org/wp-content/uploads/2016/03/20141222134630106-300x164.png"/>
        </a>
        <a class="link" href="http://dataunion.org/24670.html" rel="bookmark" title="Apache Spark 不过时的六大理由">
         Apache Spark 不过时的六大理由
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/24558.html">
         <img src="http://dataunion.org/wp-content/uploads/2016/06/wKiom1dcvqDBYzojAAF3j3hfL_s877.jpg-wh_651x-s_1673119543-300x197.jpg"/>
        </a>
        <a class="link" href="http://dataunion.org/24558.html" rel="bookmark" title="实现R与Hadoop联合作业的三种方法">
         实现R与Hadoop联合作业的三种方法
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/24454.html">
         <img src="http://dataunion.org/wp-content/uploads/2016/06/234040u557x77z325w2g3o-267x200.jpg"/>
        </a>
        <a class="link" href="http://dataunion.org/24454.html" rel="bookmark" title="LinkedIn 开源其分布式对象存储系统 Ambry">
         LinkedIn 开源其分布式对象存储系统 Ambry
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/24349.html">
         <img src="http://dataunion.org/wp-content/uploads/2016/05/20150402110749389-249x200.jpg"/>
        </a>
        <a class="link" href="http://dataunion.org/24349.html" rel="bookmark" title="生活处处皆学问，我从星巴克咖啡学到的5点架构经验">
         生活处处皆学问，我从星巴克咖啡学到的5点架构经验
        </a>
       </li>
      </ul>
     </div>
     <!--相关文章-->
     <div class="comment" id="comments">
      <!-- You can start editing here. -->
      <!-- If comments are open, but there are no comments. -->
      <div class="title">
       期待你一针见血的评论，Come on！
      </div>
      <div id="respond">
       <p>
        不用想啦，马上
        <a href="http://dataunion.org/wp-login.php?redirect_to=http%3A%2F%2Fdataunion.org%2F3194.html">
         "登录"
        </a>
        发表自已的想法.
       </p>
      </div>
     </div>
     <!-- .nav-single -->
    </div>
    <!--Container End-->
    <aside id="sitebar">
     <div class="sitebar_list2">
      <div class="wptag">
       <span class="tagtitle">
        热门标签+
       </span>
       <div class="tagg">
        <ul class="menu" id="menu-%e5%8f%8b%e6%83%85%e9%93%be%e6%8e%a5">
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-1605" id="menu-item-1605">
          <a href="http://taidizh.com/">
           泰迪智慧
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-20884" id="menu-item-20884">
          <a href="http://www.transwarp.cn/">
           星环科技
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-3538" id="menu-item-3538">
          <a href="http://datall.org/">
           珈和遥感
          </a>
         </li>
         <li class="menu-item menu-item-type-custom menu-item-object-custom menu-item-20888" id="menu-item-20888">
          <a href="http://www.chinahadoop.cn/">
           小象学院
          </a>
         </li>
        </ul>
       </div>
      </div>
     </div>
     <div class="sitebar_list">
      <div class="textwidget">
       <div align="center">
        <a href="http://study.163.com/course/courseMain.htm?courseId=991022" target="_blank">
         <img src="http://dataunion.org/wp-content/uploads/2016/03/dv.jpg"/>
        </a>
       </div>
      </div>
     </div>
     <div class="sitebar_list">
      <h4 class="sitebar_title">
       文章分类
      </h4>
      <div class="tagcloud">
       <a class="tag-link-44" href="http://dataunion.org/category/industry/demo" style="font-size: 10.204724409449pt;" title="4个话题">
        Demo展示
       </a>
       <a class="tag-link-31" href="http://dataunion.org/category/experts" style="font-size: 15.826771653543pt;" title="52个话题">
        专家团队
       </a>
       <a class="tag-link-870" href="http://dataunion.org/category/tech/ai" style="font-size: 19.795275590551pt;" title="273个话题">
        人工智能
       </a>
       <a class="tag-link-488" href="http://dataunion.org/category/%e5%8a%a0%e5%85%a5%e6%95%b0%e7%9b%9f" style="font-size: 8pt;" title="1个话题">
        加入数盟
       </a>
       <a class="tag-link-869" href="http://dataunion.org/category/tech/viz" style="font-size: 17.204724409449pt;" title="93个话题">
        可视化
       </a>
       <a class="tag-link-30" href="http://dataunion.org/category/partners" style="font-size: 10.645669291339pt;" title="5个话题">
        合作伙伴
       </a>
       <a class="tag-link-889" href="http://dataunion.org/category/parterc" style="font-size: 11.582677165354pt;" title="8个话题">
        合作会议
       </a>
       <a class="tag-link-104" href="http://dataunion.org/category/books" style="font-size: 12.96062992126pt;" title="15个话题">
        图书
       </a>
       <a class="tag-link-220" href="http://dataunion.org/category/tech/base" style="font-size: 19.850393700787pt;" title="281个话题">
        基础架构
       </a>
       <a class="tag-link-219" href="http://dataunion.org/category/tech/analysis" style="font-size: 19.409448818898pt;" title="232个话题">
        数据分析
       </a>
       <a class="tag-link-887" href="http://dataunion.org/category/tech/dm" style="font-size: 13.291338582677pt;" title="17个话题">
        数据挖掘
       </a>
       <a class="tag-link-34" href="http://dataunion.org/category/tech" style="font-size: 20.732283464567pt;" title="404个话题">
        文章
       </a>
       <a class="tag-link-1" href="http://dataunion.org/category/uncategorized" style="font-size: 22pt;" title="693个话题">
        未分类
       </a>
       <a class="tag-link-4" href="http://dataunion.org/category/events" style="font-size: 14.503937007874pt;" title="29个话题">
        活动
       </a>
       <a class="tag-link-890" href="http://dataunion.org/category/tech/%e6%b7%b1%e5%ba%a6%e5%ad%a6%e4%b9%a0" style="font-size: 10.204724409449pt;" title="4个话题">
        深度学习
       </a>
       <a class="tag-link-221" href="http://dataunion.org/category/tech/devl" style="font-size: 18.968503937008pt;" title="193个话题">
        编程语言
       </a>
       <a class="tag-link-888" href="http://dataunion.org/category/career" style="font-size: 15.661417322835pt;" title="48个话题">
        职业规划
       </a>
       <a class="tag-link-5" href="http://dataunion.org/category/jobs" style="font-size: 14.11811023622pt;" title="25个话题">
        职位
       </a>
       <a class="tag-link-871" href="http://dataunion.org/category/industry" style="font-size: 15.716535433071pt;" title="49个话题">
        行业
       </a>
       <a class="tag-link-613" href="http://dataunion.org/category/industry/case" style="font-size: 16.984251968504pt;" title="84个话题">
        行业应用
       </a>
       <a class="tag-link-885" href="http://dataunion.org/category/industry/news" style="font-size: 17.425196850394pt;" title="102个话题">
        行业资讯
       </a>
       <a class="tag-link-10" href="http://dataunion.org/category/training" style="font-size: 14.228346456693pt;" title="26个话题">
        课程
       </a>
       <a class="tag-link-16" href="http://dataunion.org/category/sources" style="font-size: 15.661417322835pt;" title="48个话题">
        资源
       </a>
      </div>
     </div>
     <div class="sitebar_list">
      <h4 class="sitebar_title">
       功能
      </h4>
      <ul>
       <li>
        <a href="http://dataunion.org/wp-login.php?action=register">
         注册
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/wp-login.php">
         登录
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/feed">
         文章
         <abbr title="Really Simple Syndication">
          RSS
         </abbr>
        </a>
       </li>
       <li>
        <a href="http://dataunion.org/comments/feed">
         评论
         <abbr title="Really Simple Syndication">
          RSS
         </abbr>
        </a>
       </li>
       <li>
        <a href="https://cn.wordpress.org/" title="基于WordPress，一个优美、先进的个人信息发布平台。">
         WordPress.org
        </a>
       </li>
      </ul>
     </div>
    </aside>
    <div class="clear">
    </div>
   </div>
   <!--main-->
   ﻿
   <footer id="dibu">
    <div class="about">
     <div class="right">
      <ul class="menu" id="menu-%e5%ba%95%e9%83%a8%e8%8f%9c%e5%8d%95">
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-18024" id="menu-item-18024">
        <a href="http://dataunion.org/category/partners">
         合作伙伴
        </a>
       </li>
       <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-20881" id="menu-item-20881">
        <a href="http://dataunion.org/contribute">
         文章投稿
        </a>
       </li>
       <li class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-20872" id="menu-item-20872">
        <a href="http://dataunion.org/category/%e5%8a%a0%e5%85%a5%e6%95%b0%e7%9b%9f">
         加入数盟
        </a>
       </li>
       <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-22441" id="menu-item-22441">
        <a href="http://dataunion.org/f-links">
         友情链接
        </a>
       </li>
       <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-20874" id="menu-item-20874">
        <a href="http://dataunion.org/aboutus">
         关于数盟
        </a>
       </li>
      </ul>
      <p class="banquan">
       数盟社区        ，
        做最棒的数据科学社区
      </p>
     </div>
     <div class="left">
      <ul class="bottomlist">
       <li>
        <a href="http://weibo.com/DataScientistUnion  " target="_blank" 　title="">
         <img src="http://dataunion.org/wp-content/themes/yzipi/images/weibo.png"/>
        </a>
       </li>
       <li>
        <a class="cd-popup-trigger" href="http://dataunion.org/3194.html#0">
         <img src="http://dataunion.org/wp-content/themes/yzipi/images/weixin.png"/>
        </a>
       </li>
      </ul>
      <div class="cd-popup">
       <div class="cd-popup-container">
        <h1>
         扫描二维码,加微信公众号
        </h1>
        <img src="http://dataunion.org/wp-content/themes/yzipi/images/2014-12-06-1515289049.png"/>
        <a class="cd-popup-close" href="http://dataunion.org/3194.html">
        </a>
       </div>
       <!-- cd-popup-container -->
      </div>
      <!-- cd-popup -->
     </div>
    </div>
    <!--about-->
    <div class="bottom">
     <a href="http://dataunion.org/">
      数盟社区
     </a>
     <a href="http://www.miitbeian.gov.cn/" rel="external nofollow" target="_blank">
      京ICP备14026740号
     </a>
     联系我们：
     <a href="mailto:contact@dataunion.org" target="_blank">
      contact@dataunion.org
     </a>
     <div class="tongji">
     </div>
     <!--bottom-->
     <div class="scroll" id="scroll" style="display:none;">
      ︿
     </div>
    </div>
   </footer>
   <!--dibu-->
  </div>
 </body>
</html>